package main

import (
	"bytes"
	"fmt"
	"strconv"
)

func main() {
	//base()
	addStr()
	//stringFun()
}
func base() {
	//解释型字符串  -- 通常意义的 可以使用 \n \t 等转义符
	st := "value"
	fmt.Println(st)
	/*
		hello
		my name is wang mao     lin
	*/
	st = "hello \nmy name is wang\tmao\tlin"
	fmt.Println(st)

	//原始字符串 --- 使用反引号 写啥就是啥，不可使用转义符
	/*
			lalal
		    	  my name is \n wang
		    	  heihei
	*/
	st = `lalal
      my name is \n wang
      heihei`
	fmt.Println(st)
}

/**
字符串拼接
*/
func addStr() {

	//1.基本拼接 使用 + +=
	str := "张"
	str += "san"
	fmt.Println(str)
	num := 1
	//2.不能不同类型相+
	//str+=num
	//3.不同类型相加，需先将其转为字符串
	num2Str := strconv.Itoa(num)
	str += num2Str
	//zhangsan1
	fmt.Println(str)
	//4.使用 + 拼接字符串效率不高，如果涉及大量的字符串拼接，应使用缓冲区
	var buffer bytes.Buffer
	for i := 0; i < 500; i++ {
		buffer.WriteString(strconv.Itoa(i))
	}
	//fmt.Println(buffer.String())

	//5.字符串长度 len() 中文字符占3字节
	fmt.Println(len(str))
	// 对应字节十进制值
	fmt.Println(str[4])
	//对应字符
	fmt.Printf("%q\n", str[4])
	// 二进制
	fmt.Printf("%b", str[4])
}
